#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void PrintPending(sigset_t pending) {
    for (int sig = 1; sig < 32; sig++) {
        if (sigismember(&pending, sig))
            printf("1");
        else
            printf("0");
    }
    printf("\n");
}

int main() {
    sigset_t block, oblock;
    sigemptyset(&block);
    sigemptyset(&oblock);
    sigaddset(&block, SIGINT);  // 2 号信号
    sigprocmask(SIG_SETMASK, &block, &oblock);  // 屏蔽 SIGINT

    int cnt = 0;
    while (1) {
        sigset_t pending;
        sigpending(&pending);
        PrintPending(pending);
        sleep(1);
        cnt++;
        if (cnt == 10) {
            sigprocmask(SIG_SETMASK, &oblock, NULL);  // 恢复旧信号掩码
            break;
        }
    }
    return 0;
}



// 模拟除0错误
// void handler(int sig)
// {
//     printf("catch a sig : %d\n", sig);
// }
// int main()
// {
//     signal(8, handler);
//     int a = 10;
//     a/=0;
//     while(1)
    
//     return 0;
// }